API Corner - Shell About Box

level: intermediate

by Alyce Watson

adapted from the [Liberty BASIC 4 Companion]

Home

Assist Tools Add-On

Assist Review

Passing DATA

Tip Corner

API Corner

Professional Software

Editing Keywords

Select Multiple Files

Eddie

Submissions

Index


In keeping with this issue's theme of releasing professional software, this article shows you how to create a professional "about box" for your application. We often use a simple NOTICE message to give this information to the user, but the Windows Shell About Box displays a more professional, polished appearance.

Here is a screenshot of a NOTICE about box, and screenshot of a ShellAboutA box.

SHELL ABOUT BOX

It is easy to invoke a special dialog to give "about" information for a program. This built-in dialog includes operating system information, including the version of Windows and the current free system resources. The function is part of shell32.dll and is called ShellAboutA.

It requires several parameters. They are

hWnd Identifies a parent window. This parameter can be NULL (equal to 0). Use the HWND() function to get the handle of a window, if desired.

szApp$ A ptr to text that the function displays in the title bar of the Shell About dialog box and on the first line of the dialog box after the text "Microsoft Windows" or "Microsoft Windows NT." If the text contains a "#" separator dividing it into two parts, the function displays the first part in the title bar, and the second part on the first line after the text "Microsoft Windows" or "Microsoft Windows NT." See the screenshots below.

szOtherStuff$ A ptr to text that the function displays in the dialog box after the version and copyright information.

hIcon Identifies the handle of an icon that the function displays in the dialog box. If this parameter is NULL (equal to 0), the function simply displays the Microsoft Windows or Microsoft Windows NT icon. An icon can be loaded from a disk file with either ExtractIconA or LoadImageA, and the icon handle returned by these functions can be used with ShellAboutA. The desired icon will be added to the display in the Shell About Box. Use either of these functions to load the icon:

file$="iconname.ico"

CallDLL #shell32, "ExtractIconA", 0 As long,_
file$ As ptr,_  'disk filename of icon
0 As long,_     'index = 0 is first icon in file
hIcon As ulong  'handle of icon

OR

calldll #user32, "LoadImageA",_
0 as long,_      'instance - use 0 for image from file
file$ as ptr,_   'path and filename of image
_IMAGE_ICON as long,_'type is icon
width as long,_  'desired width
height as long,_ 'desired height
_LR_LOADFROMFILE as long,_  'load flag
hIcon as ulong   'handle of loaded icon

Here is a small demo program that uses only the default icon. You can copy this code and paste it into the Liberty BASIC editor to run it.

szApp$="About This Program #   Liberty BASIC Rocks!"
cr$ = chr$(13)  'carriage return
szOtherStuff$ = cr$ + "Created by John Q. Programmer" + cr$
hIcon=0
hWnd=0

calldll #shell32, "ShellAboutA",_
    hWnd as ulong,_
    szApp$ as ptr,_
    szOtherStuff$ as ptr,_
    hIcon as ulong,_
    ret as long

And here is one that adds a custom icon file. A copy of this code and the music icon are included in the zipped archive of this issue.

nomainwin
button #1.b, "About", [about], UL, 10,10
open "My App" for window as #1
#1 "trapclose [quit]"
wait
[quit] close #1:end

[about]
    icon$ = "icon.ico"
    CallDLL #shell32, "ExtractIconA",_
    0 As long,_
    icon$ As ptr,_  'disk filename of icon
    0 As long,_     'index = 0 is first icon in file
    hIcon As ulong  'handle of icon

    hndle = hwnd(#1)

    szApp$="About This Program #   Liberty BASIC Rocks!"
    cr$ = chr$(13)  'carriage return
    szOtherStuff$ = cr$ + "Created by John Q. Programmer" + cr$

    calldll #shell32, "ShellAboutA",_
    hndle as ulong,_    'window handle
    szApp$ as ptr,_     'app name
    szOtherStuff$ as ptr,_  'info
    hIcon as ulong,_    'icon handle
    ret as long

    wait


Home

Assist Tools Add-On

Assist Review

Passing DATA

Tip Corner

API Corner

Professional Software

Editing Keywords

Select Multiple Files

Eddie

Submissions

Index